import { getSetting, chooseAddress, openSetting, showModal ,showToast} from "../../utils/asyncWx.js";
import regeneratorRuntime from '../../lib/runtime/runtime';
Page({
  data:{
    address:{},
    cart:[],
    allChecked:false,
    totalPrice:0,
    totalNum:0,
    orderTime:'',
    userInfo:{}
  },
  userInfo:{},

  onShow(){
    // 1.获取缓存中的收货地址信息
    const address = wx.getStorageSync("address");
    // 1.获取缓存中的购物车数据
    const cart = wx.getStorageSync("cart")||[];
    this.setData({address});
    this.setCart(cart);
  },

  // 点击 收货地址
  async handleChooseAddress() {
    try {
      // 1 获取 权限状态
      const res1 = await getSetting();
      const scopeAddress = res1.authSetting["scope.address"];
      // 2 判断 权限状态
      if (scopeAddress === false) {
        await openSetting();
      }
      // 4 调用获取收货地址的 api
      let address = await chooseAddress();
      address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;

      // 5 存入到缓存中
      wx.setStorageSync("address", address);

    } catch (error) {
      console.log(error);
    }
  },

  // 商品的选中
  handleItemChange(e){
    // 1.获取被修改的商品的id
    const goods_no = e.currentTarget.dataset.id;
    // 2.获取购物车数组
    let {cart} = this.data;
    // 3.找到被修改的商品对象
    let index = cart.findIndex(v => v.goods_no === goods_no);
    // 4.选中状态取反
    cart[index].checked = !cart[index].checked;
    // 5./6.把购物车中的数据重新传回data中和缓存中
    this.setCart(cart);
  },

  // 设置购物车状态的同时 重新计算  底部工具栏的数据: 总价格、购买的数量
  setCart(cart){
    let totalPrice = 0;
    let totalNum = 0;
    let allChecked = true;
    cart.forEach(v=>{
      if(v.checked){
        totalPrice += v.num * v.price;
        totalNum += v.num;
      }else{
        allChecked = false
      }
    })
    allChecked = cart.length != 0 ?allChecked:false;

    this.setData({
      cart,
      totalPrice,
      totalNum,
      allChecked
    });
    wx.setStorageSync("cart",cart);
  },

  // 购物车全选按钮功能
  handleItemAllCheck(){
    // 1.获取data中的数据
    let {cart, allChecked} = this.data;
    // 2.修改值
    allChecked = !allChecked;
    // 3.循环修改cart数组 中的商品选中状态
    cart.forEach(v => v.checked = allChecked);
    // 4.把修改后的值 填充回data或缓存中
    this.setCart(cart);
  },

  // 商品数量的编辑功能
  async handleItemNumEdit(e){
    // 1.获取传递过来的参数
    const {operation, id} = e.currentTarget.dataset;
    // 2.获取购物车数组
    let {cart} = this.data;
    // 3.找到需要修改的商品的索引
    const index = cart.findIndex(v => v.goods_no === id);
    // 4.判断是否要执行删除
    if(cart[index].num === 1 && operation === -1){
      // 4.1弹窗提示
      const res = await showModal({content:"您是否要移除商品?"});
      if(res.confirm){
        cart.splice(index, 1);
        this.setCart(cart);
      }
    }else{
      // 4.进行数量修改
      cart[index].num += operation;
      // 5.设置回缓存和data中
      this.setCart(cart);
    }
  },

  // 点击 结算 功能
  async handlePay(){
    const {address, totalNum} = this.data;
    // 1.判断收货地址
    if(!address.userName){
      await showToast({title:"请选择当前您的地址"})
      return;
    }
    // 2.判断用户有没有选择商品
    if(totalNum === 0){
      await showToast({title:"您还没有选购商品"});
      return;
    }
    let userInfo = this.data.userInfo;
    userInfo = wx.getStorageSync("userInfo");
    console.log(userInfo);
    // 3.判断用户是否登录
    if(Object.keys(userInfo).length === 0){
      wx.showToast({title: '您还没有登录',icon:'none'})
      wx.getUserProfile({
        desc: '用于完善会员资料', // 声明获取用户个人信息后的用途，后续会展示在弹窗中，请谨慎填写
        success: (res) => {
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true,
          })
          const userInfo = res.userInfo;
          wx.setStorageSync("userInfo", userInfo);
        }
      })
      return;
    }
    // 3 跳转到 支付页面
    wx.navigateTo({
      url: '/pages/pay/pay'
    });
  }
})